#region Using

using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Configuration;
using System.Configuration.Provider;
using System.Web.Configuration;
using System.Web;
using System.IO;
using Sueetie.Core;

#endregion

namespace Sueetie.Core
{
    /// <summary>
    /// The proxy class for communication between the business objects and the providers.
    /// </summary>
    /// 
    public static class SueetieUsers
    {

        #region User

        public static SueetieUser GetUser(int userID)
        {
            string userCacheKey = UserCacheKey(userID);
            SueetieUser sueetieUser = SueetieCache.Current[userCacheKey] as SueetieUser;
            if (sueetieUser == null)
            {
                SueetieDataProvider _provider = SueetieDataProvider.LoadProvider();
                sueetieUser = _provider.GetUser(userID);
                SueetieCache.Current.Insert(userCacheKey, sueetieUser);
            }
            return sueetieUser;
        }
        public static string UserCacheKey(int userID)
        {
            return string.Format("SueetieUserID-{0}", userID.ToString());
        }
        public static void ClearUserCache(int userID)
        {
            SueetieCache.Current.Remove(UserCacheKey(userID));
        }
        public static void CreateSueetieUser(SueetieUser sueetieUser)
        {
            SueetieDataProvider _provider = SueetieDataProvider.LoadProvider();
            _provider.CreateSueetieUser(sueetieUser);
        }
        public static void UpdateSueetieUser(SueetieUser sueetieUser)
        {
            SueetieDataProvider _provider = SueetieDataProvider.LoadProvider();
            _provider.UpdateSueetieUser(sueetieUser);
        }

        #endregion

        #region User Profile

        public static SueetieUserProfile GetSueetieUserProfile(int userID)
        {
            string userProfileCacheKey = UserProfileCacheKey(userID);
            SueetieUserProfile sueetieUserProfile = SueetieCache.Current[userProfileCacheKey] as SueetieUserProfile;
            if (sueetieUserProfile == null)
            {
                SueetieDataProvider _provider = SueetieDataProvider.LoadProvider();
                sueetieUserProfile = _provider.GetSueetieUserProfile(userID);
                SueetieCache.Current.InsertMinutes(userProfileCacheKey, sueetieUserProfile, 5);
            }
            return sueetieUserProfile;
        }
        public static string UserProfileCacheKey(int userID)
        {
            return string.Format("SueetieUserProfile-{0}", userID.ToString());
        }
        public static void ClearUserProfileCache(int userID)
        {
            SueetieCache.Current.Remove(UserProfileCacheKey(userID));
        }

        #endregion

        #region Avatars

        public static void UpdateSueetieUserAvatar(SueetieUserAvatar sueetieUserAvatar)
        {
            SueetieDataProvider _provider = SueetieDataProvider.LoadProvider();
            _provider.UpdateSueetieUserAvatar(sueetieUserAvatar);
        }

        public static void DeleteAvatar(int _userID)
        {
            SueetieDataProvider _provider = SueetieDataProvider.LoadProvider();
            _provider.DeleteAvatar(_userID);
        }

        #endregion

        #region User Helpers

        public static int GetUserID(string username)
        {
            SueetieDataProvider _provider = SueetieDataProvider.LoadProvider();
            return _provider.GetUserID(username);
        }

        #endregion

        #region Anonymous User

        public static SueetieUser GetAnonymousUser()
        {
            SueetieUser sueetieUser = new SueetieUser();
            sueetieUser.UserID = -1;
            sueetieUser.UserName = "anonymous";
            sueetieUser.Email = "na@sueetie.org";
            return sueetieUser;
        }
        public static SueetieUserProfile GetAnonymousUserProfile()
        {
            SueetieUserProfile sueetieUserProfile = new SueetieUserProfile();
            sueetieUserProfile.DisplayName = "Guest";
            return sueetieUserProfile;
        }

        #endregion

    }
}
